package org.dromara.system.domain.vo;

import jakarta.validation.constraints.NotNull;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.system.domain.ZtUserVipOrder;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;



/**
 * 用户VIP订单视图对象 zt_user_vip_order
 *
 * @author Lion Li
 * @date 2024-06-27
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ZtUserVipOrder.class)
public class ZtUserVipOrderVo extends BaseEntity {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @ExcelProperty(value = "主键")
    private Long id;

    /**
     * 购买的VIPID
     */
    @ExcelProperty(value = "购买的VIPID")
    private Long vipId;

    /**
     * 用户使用的优惠卷ID
     */
    @ExcelProperty(value = "用户使用的优惠卷ID")
    private Long userCouponId;

    /**
     * 用户ID
     */
    @ExcelProperty(value = "用户ID")
    private Long userId;

    /**
     * 金额（单位分）
     */
    @ExcelProperty(value = "金额", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "单=位分")
    private Long amountTotal;

    /**
     * 公众号ID
     */
    @ExcelProperty(value = "公众号ID")
    private String appid;

    /**
     * 直连商户号
     */
    @ExcelProperty(value = "直连商户号")
    private String mchid;

    /**
     * 商品描述
     */
    @ExcelProperty(value = "商品描述")
    private String description;

    /**
     * 订单号
     */
    @ExcelProperty(value = "订单号")
    private String outTradeNo;

    /**
     * 订单失效时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE
     */
    @ExcelProperty(value = "订单失效时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE")
    private String timeExpire;

    /**
     * 附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用，实际情况下只有支付完成状态才会返回该字段。
     */
    @ExcelProperty(value = "附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用，实际情况下只有支付完成状态才会返回该字段。")
    private String attach;

    /**
     * 订单优惠标记
     */
    @ExcelProperty(value = "订单优惠标记")
    private String goodsTag;

    /**
     * 电子发票入口开放标识(true：是，false：否)
     */
    @ExcelProperty(value = "电子发票入口开放标识(true：是，false：否)")
    private Integer supportFapiao;

    /**
     * 【货币类型】 CNY：人民币，境内商户号仅支持人民币。
     */
    @ExcelProperty(value = "【货币类型】 CNY：人民币，境内商户号仅支持人民币。")
    private String currency;

    /**
     * 用户标识（微信openid）
     */
    @ExcelProperty(value = "用户标识", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "微=信openid")
    private String openid;

    /**
     * 预支付交易会话标识。用于后续接口调用中使用，该值有效期为2小时
     */
    @ExcelProperty(value = "预支付交易会话标识。用于后续接口调用中使用，该值有效期为2小时")
    private String prepayId;

    /**
     * 微信支付系统生成的订单号
     */
    @ExcelProperty(value = "微信支付系统生成的订单号")
    private String transactionId;

    /**
     * 交易类型（JSAPI：公众号支付，NATIVE：扫码支付，App：App支付，MICROPAY：付款码支付，MWEB：H5支付，FACEPAY：刷脸支付）
     */
    @ExcelProperty(value = "交易类型", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "JSAPI=公众号支付,NATIVE=扫码支付,App=App支付,MICROPAY=付款码支付,MWEB=H5支付,FACEPAY=刷脸支付")
    private String tradeType;

    /**
     * 交易状态（SUCCESS：支付成功，REFUND：转入退款，NOTPAY：未支付，CLOSED：已关闭，REVOKED：已撤销（付款码支付），USERPAYING：用户支付中（付款码支付），PAYERROR：支付失败(其他原因，如银行返回失败)）
     */
    @ExcelProperty(value = "交易状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "SUCCESS=支付成功,REFUND=转入退款,NOTPAY=未支付,CLOSED=已关闭,REVOKED=已撤销（付款码支付）,USERPAYING=用户支付中（付款码支付）,PAYERROR=支付失败(其他原因，如银行返回失败)")
    private String tradeState;

    /**
     * 交易状态描述
     */
    @ExcelProperty(value = "交易状态描述")
    private String tradeStateDesc;

    /**
     * 银行类型
     */
    @ExcelProperty(value = "银行类型")
    private String bankType;

    /**
     * 支付完成时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE
     */
    @ExcelProperty(value = "支付完成时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE")
    private String successTime;

    /**
     * 用户在直连商户AppID下的唯一标识。
     */
    @ExcelProperty(value = "用户在直连商户AppID下的唯一标识。")
    private String payerOpenid;

    /**
     * 用户支付金额，单位为分
     */
    @ExcelProperty(value = "用户支付金额，单位为分")
    private Long payerTotal;

    /**
     * 用户支付币种
     */
    @ExcelProperty(value = "用户支付币种")
    private String payerCurrency;

    /**
     * 备注
     */
    @ExcelProperty(value = "备注")
    private String remark;


}
